#include "ros/ros.h"
#include "server_client/Addints.h"

/*
服务端实现：解析客户端提交的数据
1，包含头文件
2，初始化ros节点
3，创建节点句柄
4， 创建一个客户端对象
5，提交请求并处理响应

实现参数的动态提交
   1，格式： rosrun xxx xxxx 12 34
   2, 节点执行时， 需要获取命令行中的参数， 并组织进 request

   问题：
        先启动客户端 ，后启动服务端
   需求：
        如果先启动客户端， 不要直接抛异常， 而是挂起，等服务器启动后，再正常请求
   解决：
        在ROS中内置了相关函数， 这些函数可以让客户端启动后挂起，等待服务端启动

*/

int main(int argc, char** argv)
{
    setlocale(LC_ALL, "");
    //优化实现
    if(argc!=3){
        ROS_INFO("提交的参数不对");
        return 1;
    }
    
    //2，初始化ros节点
    ros::init(argc, argv, "dabao");
    //3，创建节点句柄
    ros::NodeHandle nh;
    //4， 创建一个客户端对象
    ros::ServiceClient client=nh.serviceClient<server_client::Addints>("addInts");    
    //5， 提交请求并处理响应
    server_client::Addints ai;
    //5.1  组织请求
    ai.request.num1=atoi(argv[1]);
    ai.request.num2=atoi(argv[2]);
    //5.2 处理响应
    //调用判断服务器状态的函数
    //函数1
    //client.waitForExistence();
    ros::service::waitForService("addInts");


    bool flag=client.call(ai);



    if(flag){
        ROS_INFO("响应成功");
        //获取结果
        ROS_INFO("响应结果为 %d", ai.response.sum);
    }else{
        ROS_INFO("处理失败");
    }
    
    return 0;
}

